// https://leetcode-cn.com/problems/valid-palindrome/solution/yan-zheng-hui-wen-chuan-by-leetcode-solution/

class Solution
{
public:
  bool isPalindrome(string s)
  {
    int n = s.size();
    int left = 0, right = n - 1;

    while (left < right)
    {
      // left 起始
      while (left < right && !isalnum(s[left])) // isalnum() 只考虑字母和数字字符，可以忽略字母的大小写
        ++left;

      // right 终止
      while (left < right && !isalnum(s[right]))
        --right;

      // 判断 str[left] 是否等于 str[tight]
      if (tolower(s[left]) != tolower(s[right])) // 不相等，肯定【不是】回文串
        return false;

      // 相对，【继续】判断
      ++left;
      --right;
    }

    // 全部遍历完毕，都没有 return false 则肯定【是】回文串
    return true;
  }
};